package com.wyw.learning.thread.immutable;

/**
 * 演示final变量
 *
 * @author Mr Wu    yewen.wu.china@gmail.com
 * <p>
 * Update History:
 * Author        Time            Content
 */
public class FinalVariableDemo {
/*
（1）、在声明变量的等号右边直接赋值；（2）、构造函数中赋值；（3）、在类的初始代码块中赋值（不常用）
如果不采用第一种赋值方式，那么就必须在2、3中挑选一个方式来赋值，不能不赋值，这是final语法所规定的
 */
//    private final int a = 1;
//    private final int a;

//    public FinalVariableDemo(int a) {
//        this.a = a;
//    }

//    {
//        a=7;
//    }


/*
    final static variable
    两个赋值时机：除了在声明变量的等号右边直接福之外，static final变量还可以用static初始化代码块赋值，但是不能用普通的初始化代码块赋值
 */
//    public static final int b = 1;
//    public static final int b;

//    static {
//        b = 1;
//    }

    /*
        与前面两种不同
        final local variable没有构造函数，也不存在初始代码块，但是规定必须在使用前赋值，和普通的一样
     */
    void testFinal() {
        final int b;

        b=5;
        int c = b;
    }


}
